package com.mikelouis.test.scala.proginscala.chapter8

import scala.io.Source


/**
 * Created by yuazhu on 1/2/2015.
 */
object LongLines2 {
  /**
   * 通过把私有方法，processLine，转换为本地方法，processFile，重构了LongLines版本。
   * 为了做到这点我们去掉了private修饰符，它仅能应用于方法（并且仅被方法需要），
   * 然后把processLine的定义放在processFile的定义里
   * @param filename
   * @param width
   */
  def processFile(filename: String, width: Int) {
    def processLine(filename: String, width: Int, line: String) {
      if (line.length > width)
        print(filename + ": " + line)
    }

    val source = Source.fromFile(filename)
    for (line <- source.getLines()) {
      processLine(filename, width, line)
    }
  }

  /**
   * 本地函数可以访问包含它们的函数的参数
   * @param filename
   * @param width
   */
  def processFile2(filename: String, width: Int): Unit = {
    def processLine(line: String): Unit = {
      if (line.length > width)
        print(filename + ": " + line)
    }

    val source = Source.fromFile(filename)
    for (line <- source.getLines())
      processLine(line)
  }

}
